home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / progwin.zip / WHATSIZE.ZIP / WHATSIZE.C next >
C/C++ Source or Header  |  1991-11-01  |  3KB  |  123 lines

  1. /*----------------------------------------
  2.    WHATSIZE.C -- WHat Size Is the Window?
  3.   ----------------------------------------*/
  4.  
  5. #include <windows.h>
  6. #include <stdio.h>
  7.  
  8. long FAR PASCAL WndProc(HWND, WORD, WORD, LONG);
  9.  
  10. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  11.                    LPSTR lpszCmdLine, int nCmdShow)
  12. {
  13.   static char szAppName[] = "WhatSize";
  14.   HWND hwnd;
  15.   MSG msg;
  16.   WNDCLASS wndclass;
  17.  
  18.   if (!hPrevInstance)
  19.   {
  20.     wndclass.style = CS_HREDRAW | CS_VREDRAW;
  21.     wndclass.lpfnWndProc = WndProc;
  22.     wndclass.cbClsExtra = 0;
  23.     wndclass.cbWndExtra = 0;
  24.     wndclass.hInstance = hInstance;
  25.     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  26.     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  27.     wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
  28.     wndclass.lpszMenuName = NULL;
  29.     wndclass.lpszClassName = szAppName;
  30.     RegisterClass(&wndclass);
  31.   }
  32.  
  33.   hwnd = CreateWindow(szAppName, "What Size Is the Window?",
  34.                       WS_OVERLAPPEDWINDOW,
  35.                       CW_USEDEFAULT, CW_USEDEFAULT,
  36.                       CW_USEDEFAULT, CW_USEDEFAULT,
  37.                       NULL, NULL, hInstance, NULL);
  38.  
  39.   ShowWindow(hwnd, nCmdShow);
  40.   UpdateWindow(hwnd);
  41.  
  42.   while (GetMessage(&msg, NULL, 0, 0))
  43.   {
  44.     TranslateMessage(&msg);
  45.     DispatchMessage(&msg);
  46.   }
  47.   return msg.wParam;
  48. }
  49.  
  50. void Show(HWND hwnd, HDC hdc, short xText, short yText, short nMapMode,
  51.           char *szMapMode)
  52. {
  53.   char szBuffer[60];
  54.   RECT rect;
  55.  
  56.   SaveDC(hdc);
  57.  
  58.   SetMapMode(hdc, nMapMode);
  59.   GetClientRect(hwnd, &rect);
  60.   DPtoLP(hdc, (LPPOINT) &rect, 2);
  61.  
  62.   RestoreDC(hdc, -1);
  63.  
  64.   TextOut(hdc, xText, yText, szBuffer,
  65.           sprintf(szBuffer, "%-20s %7d %7d %7d %7d", szMapMode,
  66.             rect.left, rect.right, rect.top, rect.bottom));
  67. }
  68.  
  69. long FAR PASCAL WndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
  70. {
  71.   static char szHeading[] =
  72.       "Mapping Mode            Left   Right     Top  Bottom";
  73.  
  74.   static char szUndLine[] =
  75.       "------------            ----   -----     ---  ------";
  76.  
  77.   static short cxChar, cyChar;
  78.   HDC hdc;
  79.   PAINTSTRUCT ps;
  80.   TEXTMETRIC tm;
  81.  
  82.   switch (message)
  83.   {
  84.     case WM_CREATE:
  85.       hdc = GetDC(hwnd);
  86.       SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
  87.  
  88.       GetTextMetrics(hdc,&tm);
  89.       cxChar = tm.tmAveCharWidth;
  90.       cyChar = tm.tmHeight + tm.tmExternalLeading;
  91.  
  92.       ReleaseDC(hwnd, hdc);
  93.       return 0;
  94.  
  95.     case WM_PAINT:
  96.       hdc = BeginPaint(hwnd, &ps);
  97.       SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
  98.  
  99.       SetMapMode(hdc, MM_ANISOTROPIC);
  100.       SetWindowExt(hdc, 1, 1);
  101.       SetViewportExt(hdc, cxChar, cyChar);
  102.  
  103.       TextOut(hdc, 1, 1, szHeading, sizeof szHeading - 1);
  104.       TextOut(hdc, 1, 2, szUndLine, sizeof szUndLine - 1);
  105.  
  106.       Show(hwnd, hdc, 1, 3, MM_TEXT, "TEXT (pixels)");
  107.       Show(hwnd, hdc, 1, 4, MM_LOMETRIC, "LOMETRIC (.1 mm)");
  108.       Show(hwnd, hdc, 1, 5, MM_HIMETRIC, "HIMETRIC (.01 mm)");
  109.       Show(hwnd, hdc, 1, 6, MM_LOENGLISH, "LOENGLISH (.01 in)");
  110.       Show(hwnd, hdc, 1, 7, MM_HIENGLISH, "HIENGLISH (.001 in)");
  111.       Show(hwnd, hdc, 1, 8, MM_TWIPS, "TWIPS (1/1440 in)");
  112.  
  113.       EndPaint(hwnd, &ps);
  114.       return 0;
  115.  
  116.     case WM_DESTROY:
  117.       PostQuitMessage(0);
  118.       return 0;
  119.  
  120.   }
  121.   return DefWindowProc(hwnd, message, wParam, lParam);
  122. }
  123.